/*
 * IdGenerator.h
 */

#ifndef __IDGENERATOR_H__
#define __IDGENERATOR_H__

#define MAX_LINE_LENGTH 256
#define SEQ_FILE_SEPARATOR ":"

#include <cstddef>
#include <string>
#include <map>
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include "../utils/StringUtils.h"

using namespace std;


class IDGenerator {

public:

	virtual ~IDGenerator();

	static IDGenerator* getInstance();

	/**
	 * Devuelve el próximo id de la secuencia cuyo nombre se recibió
	 */
	int getNextID(const string& sequenceName);


	/**
	 * Reiniciamos la sequencia
	 */
	void reset(const string& seqName);

	/**
	 * Resetea todas las secuencias
	 */
	void resetAll();

	bool save(const string& seqFileName);

	bool save();


	/**
	 * Carga las secuencias del archivo por defecto
	 */
	bool loadAll();

private:

	map<string, int> nombreSecuenciasUltimaSecuencia;


	IDGenerator();

	/**
	 *
	 */
	static IDGenerator* instance;

	/**
	 * Parsea el archivo de secuencias y carga los últios ids devueltos por cada una en el mapa de secuencias
	 */
	void parseSeqFile(ifstream* seqFile);

	/**
	 * Persiste los últimos ids entregados por cada secuencia
	 */
	void saveSequences(ofstream* seqFile);
	bool load(const string& seqFileName);

};

#endif /* IDGENERATOR_H_ */
